package com.kedacom.ctsp.registry.service;


/**
 * @author sunchenjie
 * @date 2017/11/14 0014
 */
public interface UserAccountService {

    /**
     * 获取用户的邮箱
     *
     * @param userId
     * @return
     */
    String getMailByUserId(Long userId);

    /**
     * 根据用户名获取用户id
     *
     * @param username
     * @return
     */
    Long getUserIdByUsername(String username);

    /**
     * 注册
     *
     * @param username
     * @param pwd
     * @param email
     * @return
     */
    boolean register(String username, String pwd, String email);


    /**
     * 发送激活账号邮件
     *
     * @param userId
     * @return 1：表示成功发送 2：表示用户已激活，无需发送
     */
    int sendMailForActivateAccount(Long userId);

    /**
     * 真正的发送邮件
     * 使用javaMailSender
     *
     * @param toMail
     * @param url
     */
    void sendMailDataForActivateAccount(String toMail, String url);


    /**
     * 检测用户是否处于未激活状态
     *
     * @return
     */
    boolean checkUserUnActive(Long userId);


    /**
     * 通过url激活账号
     */
    Long activateAccountByVerifyUrl(String verifyUrl);

    /**
     * 激活账号
     *
     * @param userId
     */
    void activeAccount(Long userId);

    /**
     * 根据用户名 找回密码
     *
     * @param username
     */
    void retrievePasswordByUsername(String username);

    /**
     * 根据邮箱找回密码
     *
     * @param username
     */
    void retrievePasswordByEmail(String username);

    /**
     * 授权码验证
     *
     * @param username
     * @param code
     * @return
     */
    Long verifyByAuthenticationCode(String username, String code);

    /**
     * 授权码修改密码验证
     *
     * @param username
     * @param pwd
     * @param code
     * @return
     */
    boolean modifyPwdByAuthenticationCode(String username, String pwd, String code);

    /**
     * 通过url方式修改密码
     *
     * @param verifyUrl
     * @return
     */
    boolean modifyPwdByVerifyUrl(String verifyUrl);

    /**
     * 真正的修改用户密码
     * 包含了密码的处理（生成salt、加密等）
     *
     * @param userId
     * @param pwd
     */
    void modifyUserPwd(Long userId, String pwd);


    /**
     * 通过userId获取mail（打码）
     * 判断账号是否被禁用
     * 验证 用户
     *
     * @param userId
     * @return
     */
    String getUserEmailAndValidate(Long userId);

    /**
     * 检查用户名唯一性
     *
     * @param username
     * @return
     */
    boolean checkUsernameUnique(String username);

    /**
     * 检查邮箱唯一性
     *
     * @param email
     * @return
     */
    boolean checkEmailUnique(String email);

}
